#include <initializer_list>
#include <iostream>

class Foo {
public:
  Foo(int a, double b) { std::cout << "without initializer_list\n"; }

  // Foo(std::initializer_list<long double> il) noexcept {
  // std::cout << "with initializer_list<long double>\n";
  //}

  // compile error. initializer_list not support narrowing conversion.
  // Foo(std::initializer_list<bool> il) {
  // std::cout << "with initializer_list<bool>\n";
  //}

  Foo(std::initializer_list<std::string> il) {
    std::cout << "with initializer_list<string>\n";
  }
};

int main(int argc, char *argv[]) {
  Foo x{10, 5.0}; // type mismatch. select Foo(int, double) ctor
}
